<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
<script>
  const arr = ['a', 'b', 'c']
  const arr1 = ['d', 'e', 'f']


  // 需求：实现一个myForEach
  console.log(23)
  // 功能：跟数组原有的forEach一模一样的功能
  // filter/map
  // 其他方法的实现借鉴forEach的实现
  Array.prototype.myForEach = function (fn) {
    for (let i = 0; i < this.length; i++) {
      fn(this[i], i, this)
    }
  }
  // fn(this[i], i, this)
  // fn(this[i], i, this)
  // fn(this[i], i, this)
  // fn(this[i], i, this)
  Array.prototype.myFilter = function (fn) {
    const arr = []
    for (let i = 0; i < this.length; i++) {
      const flag = fn(this[i], i, this)
      if (flag) arr.push(this[i])
    }
    return arr
  }

  Array.prototype.mySome = function (fn) {
    for (let i = 0; i < this.length; i++) {
      const flag = fn(this[i], i, this)
      if (flag) return true
    }
    return false
  }

  Array.prototype.myEvery = function (fn) {
    for (let i = 0; i < this.length; i++) {
      const flag = fn(this[i], i, this)
      if (!flag) return false
    }
    return true
    // return arr
  }

  Array.prototype.myMap = function (fn) {
    const arr = []
    for (let i = 0; i < this.length; i++) {
      arr.push(fn(this[i], i, this))
    }
    return arr
  }
  // arr.myForEach((item, index, data) => {
  //   console.log(`\n\n\n\n\n\n\n---------第${index}项`)
  //   console.log(item)
  //   console.log(index)
  //   console.log(data)
  // })

  //  数组方法都要写
  //  写完之后就知道数组方法内部是怎么去判断数据的

  //  实现一个forEach方法

  arr.myForEach(item => {
    console.log(item)
  })

  arr1.myForEach(item => {
    console.log(item)
  })

</script>
</body>
</html>
